import { Injectable } from '@angular/core';

// 使用RxJS
// 引入RxJS的Observable
import { observable, Observable } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class MyserviceService {
  public animalInfor={
    name:'小鸡鸡',
    age:1
  }
  constructor() { }
  show(){
    console.log('我是服务中的show哦')
  }
  // 同步方法
  getData(){
    return '我是服务中的数据'
  }

  /*
  使用定时器模拟异步请求
  */ 
  // 异步方法
  // 回调函数
  getCallbackData(cbFn:any){
    setTimeout(() => {
      let data = {
        name:'张三',
        age:16
      }
      cbFn(data)
    }, 1000);
  }
  // Promise
  getPromiseData(){
    return new Promise((resolve,reject) => {
      setTimeout(() => {
        let data = {
          name:'张三',
          age:16
        }
        resolve(data)
      }, 2000);
    })
  }

  // RxJS
  getRxjsData(){
    return new Observable((observer) =>{
      setTimeout(() => {
        let data = {
          name:'张三',
          age:16
        }
        observer.next(data)     //成功调用.next方法
        // observer.error('出错啦')  //失败调用.error方法
      }, 2000);
    })
  }

  // 多次执行对比
  // Promise
  getPromiseDataInterval(){
    return new Promise((resolve,reject) => {
      setInterval(() => {
        let data = {
          name:'张三',
          age:16
        }
        resolve(data)
      },1000)
    })
  }
  // RxJS
  getRxjsDataInterval(){
    return new Observable((observe) => {
      setInterval(() =>{
        let data = {
          name:'张三',
          age:16
        }
        observe.next(data)
      },1000)
    })
  }

  // 
  getRxjsNumInterval(){
    return new Observable((observe) => {
      let count:number = 0 
      setInterval(() => {
        observe.next(count ++)
      },1000)
    })
  }
}
